home *** CD-ROM | disk | FTP | other *** search
/ Clickx 96 / Clickx 96.iso / software / tools / tool / xbmc-10.1.exe / addons / script.rss.editor / resources / lib / rssEditor.py < prev    next >
Encoding:
Python Source  |  2011-03-08  |  4.8 KB  |  125 lines

  1. import xbmc
  2. import xbmcgui
  3. import os, sys
  4. from xmlParser import XMLParser
  5.  
  6. #enable localization
  7. getLS   = sys.modules[ "__main__" ].__language__
  8. __cwd__ = sys.modules[ "__main__" ].__cwd__
  9.  
  10. class GUI(xbmcgui.WindowXMLDialog):
  11.  
  12.     def __init__(self, *args, **kwargs):
  13.         xbmcgui.WindowXMLDialog.__init__(self, *args, **kwargs)
  14.         self.setNum = kwargs['setNum']
  15.         self.parser = XMLParser()
  16.         if self.parser.feedsTree:
  17.             self.doModal()
  18.  
  19.  
  20.     def onInit(self):
  21.         self.defineControls()
  22.         self.feedsList = self.parser.feedsList[self.setNum]['feedslist'] #shortname
  23.         if not self.feedsList:
  24.             xbmcgui.Dialog().ok(getLS(40)+'RssFeeds.xml', 'RssFeeds.xml '+getLS(41), getLS(42), getLS(43))
  25.             self.closeDialog()
  26.         self.showDialog()
  27.  
  28.     def defineControls(self):
  29.         #actions
  30.         self.action_cancel_dialog = (9, 10)
  31.         #control ids
  32.         self.control_heading_label_id       = 2
  33.         self.control_list_label_id          = 3
  34.         self.control_list_id                = 10
  35.         self.control_changeSet_button_id    = 11
  36.         self.control_add_button_id          = 13
  37.         self.control_remove_button_id       = 14
  38.         self.control_ok_button_id           = 18
  39.         self.control_cancel_button_id       = 19
  40.         #controls
  41.         self.heading_label      = self.getControl(self.control_heading_label_id)
  42.         self.list_label         = self.getControl(self.control_list_label_id)
  43.         self.list               = self.getControl(self.control_list_id)
  44.         self.add_button         = self.getControl(self.control_add_button_id)
  45.         self.remove_button      = self.getControl(self.control_remove_button_id)
  46.         self.changeSet_button   = self.getControl(self.control_changeSet_button_id)
  47.         self.ok_button          = self.getControl(self.control_ok_button_id)
  48.         self.cancel_button      = self.getControl(self.control_cancel_button_id)
  49.  
  50.     def showDialog(self):
  51.         self.heading_label.setLabel(getLS(0))
  52.         self.list_label.setLabel(getLS(12))
  53.         self.changeSet_button.setLabel(getLS(1))
  54.         self.updateFeedsList()
  55.  
  56.     def closeDialog(self):
  57.         self.close()
  58.  
  59.     def onClick(self, controlId):
  60.         #edit existing feed
  61.         if controlId == self.control_list_id:
  62.             position = self.list.getSelectedPosition()
  63.             oldUrl = self.feedsList[position]['url']
  64.             oldUpdateInterval = self.feedsList[position]['updateinterval']
  65.             newUrl, newUpdateInterval = self.getNewFeed(oldUrl, oldUpdateInterval)
  66.             if newUrl:
  67.                 self.feedsList[position] = {'url':newUrl, 'updateinterval':newUpdateInterval}
  68.             self.updateFeedsList()
  69.         #add new feed
  70.         elif controlId == self.control_add_button_id:
  71.             newUrl, newUpdateInterval = self.getNewFeed()
  72.             if newUrl:
  73.                 self.feedsList.append({'url':newUrl, 'updateinterval':newUpdateInterval})
  74.             self.updateFeedsList()
  75.         #remove existing feed
  76.         elif controlId == self.control_remove_button_id:
  77.             self.removeFeed()
  78.             self.updateFeedsList()
  79.         #change/modify set
  80.         elif controlId == self.control_changeSet_button_id:
  81.             import setEditor
  82.             setEditorUI = setEditor.GUI("script-RSS_Editor-setEditor.xml", __cwd__, "default", setNum = self.setNum)
  83.             self.close()
  84.             del setEditorUI
  85.         #save xml
  86.         elif controlId == self.control_ok_button_id:
  87.             self.parser.writeXmlToFile()
  88.             self.closeDialog()
  89.         #cancel dialog
  90.         elif controlId == self.control_cancel_button_id:
  91.             self.closeDialog()
  92.  
  93.     def onAction(self, action):
  94.         if action in self.action_cancel_dialog:
  95.             self.closeDialog()
  96.  
  97.     def onFocus(self, controlId):
  98.         pass
  99.  
  100.     def removeFeed(self):
  101.         position = self.list.getSelectedPosition()
  102.         self.feedsList.remove(self.feedsList[position])
  103.         #add empty feed if last one is deleted
  104.         if len(self.feedsList) < 1:
  105.             self.feedsList = [{'url':'http://', 'updateinterval':'30'}]
  106.  
  107.     def getNewFeed(self, url = 'http://', newUpdateInterval = '30'):
  108.         kb = xbmc.Keyboard(url, getLS(12), False)
  109.         kb.doModal()
  110.         if kb.isConfirmed():
  111.             newUrl = kb.getText()
  112.             newUpdateInterval = xbmcgui.Dialog().numeric(0, getLS(13), newUpdateInterval)
  113.         else:
  114.             newUrl = None
  115.         return newUrl, newUpdateInterval
  116.  
  117.     def updateFeedsList(self):
  118.         self.list.reset()
  119.         for feed in self.feedsList:
  120.             self.list.addItem(feed['url'])
  121.         if self.setNum == 'set1':
  122.             self.list_label.setLabel(getLS(14) % (''))
  123.         else:
  124.             self.list_label.setLabel(getLS(14) % ('('+self.setNum+')'))
  125.